$(document).ready(function (e) { function getLocation() { var geoLocationSet = Cookies.get("geolocationSet", { domain: document.location.host }); //handle geolocation for Safari since navigator.permissions is not supported if (navigator.userAgent.includes("Safari")) { var safariGeoLocationSet = Cookies.get("safariGeolocationSet", { domain: document.location.host }); if (safariGeoLocationSet !== "true") { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition); Cookies.set("safariGeolocationSet", "true", { expires: 1, domain: document.location.host }); } } } else { if (IsLocationPermissionGranted() && geoLocationSet !== "true") { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition); } } } } function showPosition(position) { if (typeof (position) !== 'undefined') { if (typeof (position.coords) !== 'undefined') { HandleCookies(position.coords.latitude.toString(), position.coords.longitude.toString()); GetNearestLocation(); } } } function errorCallback(error) { Cookies.set('geolocationDenied', error.message, { expires: 1, domain: document.location.host }); } function HandleCookies(lat, lon) { var latCookie = Cookies.get("LatitudeCookie", { domain: document.location.host }); var lonCookie = Cookies.get("LongitudeCookie", { domain: document.location.host }); if (latCookie !== lat && lonCookie !== lon) { if (typeof (latCookie) !== 'undefined' && typeof (lonCookie) !== 'undefined') { Cookies.remove("LatitudeCookie", { domain: document.location.host }); Cookies.remove("LongitudeCookie", { domain: document.location.host }); Cookies.set("LatitudeCookie", lat, { expires: 1, domain: document.location.host }); Cookies.set("LongitudeCookie", lon, { expires: 1, domain: document.location.host }); } } } function GetNearestLocation() { Cookies.set("geolocationSet", "true", { expires: 1, domain: document.location.host }); var $button = $("#btnLocationAllowed"); if ($button.length > 0) { $button.click(); } } function IsLocationPermissionGranted() { return new Promise((resolve, reject) => navigator.permissions ? // Permission API is implemented navigator.permissions.query({ name: 'geolocation' }).then(permission => // is geolocation granted? permission.state === "granted" ? resolve("granted") : resolve(null) ) : // Permission API was not implemented reject(new Error("Permission API is not supported")) ); } getLocation(); });